import java.security.spec.RSAOtherPrimeInfo;

public class JavaString {
    //一.字符串的操作
    public static void main(String[] args) {
        char[] values={'a','b','c','d'};
        String str1=new String(values);    //把一个字符数组转换为字符串
        String str2=new String("hello");
        String str3="Hello";

       //1.字符串的比较
        System.out.println(str1.equals(str2));   //比较两个字符串的内容
        System.out.println(str2.equalsIgnoreCase(str3)); //忽视大小写比较内容
        System.out.println(str2.compareTo(str3));//比较两个字符串的大小，1.如果两个字符串一长一短，且短内容在长内容中则返回两个字符串长度的差值
                                                                   //2.如果两个字符串不相同，则返回字符串中不一样的那个字符的ASCII码的差值
        System.out.println(str2.compareToIgnoreCase(str3));//忽视大小写比较大小

       //2.字符串的查找
        char ch=str1.charAt(1);//查找某位置的下标
        System.out.println(ch);

        str1="abcabcdefg";
        System.out.println(str1.indexOf('c',3)); //查找字符串中该字符第一次出现的位置，返回的是下标,加上数字就是从一个指定的下标位置处寻找第一次出现的位置
        System.out.println(str1.indexOf("abcd",3)); //返回第一次出现该字符串的位置,找不到就返回-1

        System.out.println(str1.lastIndexOf('a',8));  //从后往前找,第一次出现的字符/字符串，返回下标
        //3.字符串的转换
        str2="123";
        System.out.println(Integer.parseInt(str2)+10);  //把字符串转换为整数
        System.out.println(String.valueOf(new char[]{'a','b','c'})); //把一个字符数组转换为字符串
        System.out.println(String.valueOf(123)+10);

        //大小写的转换
        str1="aabcd";
        System.out.println(str1.toUpperCase().toLowerCase());//字符先全部变大写在全部变小写

        //字符串转换成数组
        System.out.println(str1.toCharArray()[1]);

        //格式化
        System.out.println(String.format("%d-%d-%d",2019,9,15));

      //4.字符串的替换(所有对字符串的改变都不是在原来的对象上改变，都会自己新建一个对象)
        str1="aacdefaa";
        System.out.println(str1.replace('a','p'));
        System.out.println(str1.replace("aa","ooo")); //会发生向上转型，和replaceAll相像
        System.out.println(str1.replaceAll("aa","666")); //把所有字符串都替换
        System.out.println(str1.replaceFirst("aa","cd")); //把第一个出现的字符串替换

      //5.字符串的拆分
        str1="hello little bitter";
        String[] str4=str1.split(" ",2); //limit是最多分成的组数,分割完成后是一个字符串数组
        System.out.println(str4.length);
        for (int i = 0; i < str4.length; i++) {
            System.out.print(str4[i]+" ");
        }
        System.out.println();

        //对于'.','*','+','|'，进行分割，需要转义，加”\\“
        str1="192.128.1.1";
        str4=str1.split("\\.");
        for (int i = 0; i < str4.length; i++) {
            System.out.print(str4[i]+" ");
        }
        System.out.println();

        //对于’\‘,需要用“\\\\”进行分割
        str1="192\\128\\1\\1";
        str4=str1.split("\\\\");
        for (int i = 0; i < str4.length; i++) {
            System.out.print(str4[i]+" ");
        }
        System.out.println();
//------------------------------------------------------------------------------------------------\\
                                //2个类似的方法，看业务需求\\

        //对于有多个分隔符的（使用|来实现多个分割）
        str1="192&128+1*1";
        str4=str1.split("&|\\+|\\*");
        for (int i = 0; i < str4.length; i++) {
            System.out.print(str4[i]+" ");
        }
        System.out.println();

        //实现多次分割(先根据一个符号分割，再根据一个别的符号分割)
        str1="name=zhangsan&age=18";
        str4=str1.split("&");
        for (int i = 0; i < str4.length; i++) {
            String[] str5=str4[i].split("=");
            for (String s:str5) {
                System.out.print(s+" ");
            }
        }
        System.out.println();

      //6.字符串的截取
        str1="aabcdefg";
        System.out.println(str1.substring(1));
        System.out.println(str1.substring(2, 6));  //字符串的大部分操作都是会重新创建一个新的对象返回的 截取的结果是左闭右开的


      //7.其他操作
        str1="  hello   bird    hh  ";
        System.out.println(str1);
        System.out.println(str1.trim());  //删除左右两边所有的空格
        StringBuffer stringBuffer=new StringBuffer(str1);  //把一个字符串转化成StringBuilder类型的，就有了append和reserve方法
        System.out.println(stringBuffer.reverse());
    }




    //二.StringBuilder和StringBuffer（和String不同是:1.是可变的 2.不管什么操作都是在同一个对象上操作(所以频繁更改字符串可以使用StringBuilder)）

     //1.StringBuilder(不管什么操作都是返回的同一个对象，不会和String一样返回一个临时的对象)
    public static void main1(String[] args) {
        StringBuilder stringBuilder=new StringBuilder("abc");
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.reverse());   //字符串的逆置
        System.out.println(stringBuilder.append("123").append(10).append(19.9));

        //String变为StringBulider:利用StringBuilder的构造方法或者append()方法
        //StringBuilder变为String调用toString()方法
        String ret=stringBuilder.toString();   //把一个StringBuilder变成一个字符串对象

     //2.StringBuffer
     StringBuffer stringBuffer=new StringBuffer("abb");
     System.out.println(stringBuffer);
    }
}
